Computer programs, which may be implemented in the form of software or firmware executable on a computing device, are susceptible to errors or faults that cause incorrect or unexpected results during execution. Such errors or faults are more commonly known as “bugs.” In situations where a bug will affect performance, render a product unstable, or affect the usability of the product, the developer may find it advisable to release a software or firmware update to correct the problem. A developer may also release an update to add additional features or improve performance of the product. In general, the update includes a number of instructions used to transform the existing version stored on the user device to the updated version.
In a typical implementation, a developer transmits the software or firmware update package to the user over a wired or wireless network. For example, when the user device is a mobile phone, portable reading device, or other portable device, the user may receive the update over a cellular or other wireless network. Similarly, when the user device is a desktop or laptop computer, the user may receive the update over a wired network.
Regardless of the transmission medium used to transmit the update to the user, it is desirable to minimize the size of the update package. By making the update package as small as possible, the developer may reduce the amount of time required to transmit the update to the user and to install the update on the user's device, thereby resulting in an increase in the user's satisfaction. Similarly, minimizing the size of the update package reduces bandwidth usage, thereby reducing costs to both the user and the network provider. Existing solutions employ a number of techniques in an attempt to generate an update package of minimal size, but, ultimately, could be improved to further decrease download time, bandwidth usage, and installation time.